/**
 * 
 */
package org.stars.daostars.core.parser;

import java.util.Map;

import org.stars.daostars.core.SqlQuery;
import org.stars.daostars.exceptions.parser.OrderQueryNotFoundException;
import org.stars.daostars.sqlmapper.SqlMapper;
import org.stars.util.StringUtility;

/**
 * @author Francesco Benincasa (908099)
 *
 */
public abstract class VerifyOrderQueries {
	
	/**
	 * Verifica che le query usate per gli ordinamenti esistono. In caso di errore,
	 * il nome della query di ordinamento viene posto a "".
	 * 
	 * @param definition
	 * 			definizione del dao
	 * @return
	 * 			<code>true</code> se è andato tutto bene.
	 * @throws Exception
	 */
	public static void execute(SqlMapper definition) throws Exception {
		Map<String, SqlQuery> queries = definition.getQuerySet();
		String sOrderName;

		for (SqlQuery query : queries.values()) {
			sOrderName=StringUtility.nvl(query.getOrderByName());			
			
			if (sOrderName.length()>0 &&  definition.getQuery(sOrderName)==null)
			{
				String msg = "Dao " + definition.getName() + ", query " + query.getName()
				+ ": the order query " + sOrderName+" does not exist";
								
				query.setOrderByName("");	// annulliamo la query di order
				
				throw(new OrderQueryNotFoundException(msg));
			}
		}
	}
}
